


import bpy
import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类
from 对象操作 import bl_对象变换帧



'''class C_Node_粒子系统属性设置(基类.C_SN_基类):
	bl_dname = 'bl_node_粒子系统属性设置'
	bl_label = '粒子系统属性设置'

	def init(self, context):
		super(C_Node_粒子系统属性设置, self).f_init(context)
		self.inputs.new('C_NodeSocket_粒子', name='粒子')
		self.inputs.new('C_NodeSocket_i', name='变换方式')
		self.inputs.new('C_NodeSocket_i', name='轴向')
		Name = ['X', 'Y', 'Z']
		f_create_3F_插座(self, Name)
		self.inputs.new('C_NodeSocket_f', name='值')
		self.inputs.new('C_NodeSocket_3f', name='XYZ')'''



E_粒子属性类型枚举 = [
	("None", "None", "", 0),
	("normal_factor", "法线法线速度", "", 1),
	("factor_random", "发射随机方向因子", "", 2),
	
]



class C_Node_粒子系统属性_插帧(基类.C_SN_基类):
	bl_dname = 'bl_node_粒子系统属性设置'
	bl_label = '粒子系统属性设置 1f'

	m_参数类型 = bpy.props.EnumProperty(items=E_粒子属性类型枚举, default="None" )
	def init(self, context):
		super(C_Node_粒子系统属性_插帧, self).f_init(context)
		self.inputs.new('C_NodeSocket_粒子', name='粒子')
		self.inputs.new('C_插座_List_f', name='帧')
		self.inputs.new('C_插座_List_f', name='值')
		#self.inputs.new('C_NodeSocket_f', name='值Y')
		#self.inputs.new('C_NodeSocket_f', name='值Z')

	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_参数类型')

	def f_update(self, 是否向下传递=False, input插座=None):
		
		if self.m_参数类型 != 'None':
			objs = self.inputs['粒子'].f_getData()
			num = len(objs)

			帧Data, 帧是否独立 = 基类.f_插座数据是否独立(self, '帧', num)
			值Data, 值是否独立 = 基类.f_插座数据是否独立(self, '值', num)
			#帧 = self.inputs['帧'].f_getData()
			#值 = self.inputs['值'].f_getData()
			#print('self.m_参数类型 帧Data = ', 帧Data, 帧是否独立)
			#print('self.m_参数类型 值Data = ', 值Data, 值是否独立)
			index = 0
			for obj in objs:
				if 帧是否独立 :
					帧 = 帧Data[index]
				else:
					帧 = 帧Data

				if 值是否独立 :
					值 = 值Data[index]
				else:
					值 = 值Data
				index += 1

				bl_对象变换帧.f_物体数据插帧(obj, self.m_参数类型, '粒子属性_1f', 帧, 值)

		super(C_Node_粒子系统属性_插帧, self).f_update(是否向下传递, input插座)


class C_NODE_AddMenu_粒子系统属性_插帧(bpy.types.Operator):
	bl_idname = 'node.global_node_particle_prop_keyframe_insert'
	bl_label = '粒子系统属性 插帧'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_粒子系统属性_插帧', use_transform=True)
		return {'FINISHED'}














class C_Node_粒子系统属性_清除帧(基类.C_SN_基类):
	bl_dname = 'bl_node_粒子系统属性设置'
	bl_label = '粒子系统属性清除帧'

	m_参数类型 = bpy.props.EnumProperty(items=E_粒子属性类型枚举, default="None" )
	def init(self, context):
		super(C_Node_粒子系统属性_清除帧, self).f_init(context)
		self.inputs.new('C_NodeSocket_粒子', name='粒子')
		self.inputs.new('C_NodeSocket_f', name='帧')

	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_参数类型')

	def f_update(self, 是否向下传递=False, input插座=None):
		#print('self.m_参数类型 = ', self.m_参数类型)
		if self.m_参数类型 != 'None':
			帧 = self.inputs['帧'].f_getData()

			objs = self.inputs['粒子'].f_getData()
			#print('obj - self.m_参数类型 = ', type(objs), objs)
			for obj in objs:
				#bl_对象变换帧.f_删除指定路径所有曲线(obj)
				bl_对象变换帧.f_删除指定路径曲线的所有关键点(obj, [self.m_参数类型], 0)

		super(C_Node_粒子系统属性_清除帧, self).f_update(是否向下传递, input插座)


class C_NODE_AddMenu_粒子系统属性_清除帧(bpy.types.Operator):
	bl_idname = 'node.global_node_particle_prop_keyframe_clear'
	bl_label = '粒子系统属性 清除帧'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_粒子系统属性_清除帧', use_transform=True)
		return {'FINISHED'}









classes = (
	C_Node_粒子系统属性_插帧,
	C_NODE_AddMenu_粒子系统属性_插帧,

	C_Node_粒子系统属性_清除帧,
	C_NODE_AddMenu_粒子系统属性_清除帧,
)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)

	
